Saner error handling in iret hypercall (x86/64).
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 6 Apr 2006 14:55:37 +0000 (15:55 +0100)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 6 Apr 2006 14:55:37 +0000 (15:55 +0100)
Signed-off-by: Keir Fraser <keir@xensource.com>
xen/arch/x86/x86_64/traps.c

index ddf7b0aa30d475372b5660bb5691c4f1698c1479..fcc188364b269d79ea2f944314cbefbd255c63a3 100644 (file)
@@ -186,13 +186,19 @@ unsigned long do_iret(void)
 
     if ( unlikely(copy_from_user(&iret_saved, (void *)regs->rsp,
                                  sizeof(iret_saved))) )
+    {
+        DPRINTK("Fault while reading IRET context from guest stack\n");
         domain_crash_synchronous();
+    }
 
     /* Returning to user mode? */
     if ( (iret_saved.cs & 3) == 3 )
     {
         if ( unlikely(pagetable_get_paddr(v->arch.guest_table_user) == 0) )
-            return -EFAULT;
+        {
+            DPRINTK("Guest switching to user mode with no user page tables\n");
+            domain_crash_synchronous();
+        }
         toggle_guest_mode(v);
     }